<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>javascript继承-组合继承</title>
</head>

<body>
  <script>
    /**
     * 组合继承：原型链继承 + 构造函数继承 （ES5中最常用的继承方式）
     * 
     * */
    function PersonModel() { //父类的构造器
      this.name = '马冬梅';
      this.skill = ['唱歌', '跳舞'];
    }
    PersonModel.prototype.eat = function (food) {
      console.log('吃' + food)
    }
    Person.prototype = new PersonModel(); //子类的原型对象指向父类实例

    function Person() { //子类的构造器
      PersonModel.call(this) //子类的构造器中通过call，或者apply调用父类的构造器
    }
    let person1 = new Person();
    let person2 = new Person();
    //名称相同，因为都是从父类构造器继承过来的
    console.log('person1 与 person2的名字：', person1.name + '___' + person2.name);
    // 成功调用父类原型对象上的方法
    person2.eat('水果');
  </script>
</body>

</html>